home *** CD-ROM | disk | FTP | other *** search
- #include "ufk.h"
-
- TABLE set_table[] =
- {
- "debug", 1,
- "escape", 2,
- "line", 3,
- "baud", 4,
- "configuration", 5,
- "timeout", 6,
- "prompt", 7,
- "filetype", 8,
- "log", 9,
- "duplex", 10,
- "handshake", 11,
- "block_check_type", 12,
- "repeat_quote", 13,
- "retry", 14,
- "packet_length", 15,
- "padding", 16,
- "padchar", 17,
- "start_of_packet", 18,
- "end_of_line", 19,
- "quote", 20,
- "eight_bit_quote", 21,
- "incomplete", 22,
- "delay", 23,
- "warning", 24,
- "mapping", 25,
- "auto_recover", 26,
- "attributes", 27,
- "", 0
- };
-
- set()
- {
- int fpoint;
-
- fpoint = parse(params[1], set_table); /* Parse 'set' command */
- if (fpoint == NULL) /* Ambiguous */
- prterr(ER_AMBIGSET);
- else if (fpoint == ERROR) /* Unknown */
- prterr(ER_UNKNWSET);
- else if (!synerr(3)) /* Dispatch to command if no error */
- switch(fpoint)
- {
- case 1:
- set_debug();
- break;
- case 2:
- set_escape();
- break;
- case 3:
- set_line();
- break;
- case 4:
- set_baud(FALSE,0);
- break;
- case 5:
- set_config();
- break;
- case 6:
- set_timeout();
- break;
- case 7:
- set_prompt();
- break;
- case 8:
- set_filetype();
- break;
- case 9:
- set_log();
- break;
- case 10:
- set_dup();
- break;
- case 11:
- set_hsh();
- break;
- case 12:
- set_block_check_type();
- break;
- case 13:
- set_repeat_quote();
- break;
- case 14:
- set_retry();
- break;
- case 15:
- set_packet_length();
- break;
- case 16:
- set_padding();
- break;
- case 17:
- set_padchar();
- break;
- case 18:
- set_start_of_packet();
- break;
- case 19:
- set_end_of_line();
- break;
- case 20:
- set_quote();
- break;
- case 21:
- set_eight_bit_quote();
- break;
- case 22:
- set_incomplete();
- break;
- case 23:
- set_delay();
- break;
- case 24:
- set_warning();
- break;
- case 25:
- set_mapping();
- break;
- case 26:
- set_auto_recover();
- break;
- case 27:
- set_attributes();
- }
- }
-
- set_debug()
- {
- int temp;
-
- if ((temp = set_onoff(2)) != ERROR)
- {
- debug = temp;
- if (dbgfil != ERROR) /* Close file */
- fclose(dbgfil);
- dbgfil = ERROR;
- }
- else if (tolower(*params[2]) == 'l') /* Open debug log file */
- {
- if (numprm < 4)
- prterr(ER_FSPCREQ);
- else
- if (dbgfil != ERROR)
- prterr(ER_FILEOPEN);
- else
- {
- strcpy(dbgfname,params[3]);
- if ((dbgfil = fopen(params[3],"w")) == NULL)
- prterr(ER_OPENERR);
- else
- debug = 2;
- }
- }
- else
- synerr(0);
- }
-
- set_escape()
- {
- escchr = *params[2]; /* Get escape character */
- }
-
- set_line()
- {
- char save_descr[20];
-
- close_port(FALSE,TRUE); /* Make sure it's closed */
- if (tolower(*params[2]) == 'r')
- strcpy(tty_descr,"Remote"); /* Remote connection */
- else
- {
- strcpy(save_descr,tty_descr); /* Save port */
- strcpy(tty_descr,params[2]); /* Setup new port */
- if (!open_port(FALSE,TRUE)) /* Check the port */
- {
- strcpy(tty_descr,save_descr); /* Restore old descriptor */
- prterr(ER_INVDEV);
- }
- else
- {
- close_port(FALSE,TRUE); /* Make sure it's closed */
- call_baud = TRUE; /* Make sure baudrate will be set */
- }
- }
- }
-
-
- set_baud(startup,argv)
- int startup;
- char *argv[];
- {
- int temp,
- found,
- *p;
- static int v_speed[] = {
- 75,
- 150,
- 300,
- 600,
- 1200,
- 2400,
- 4800,
- 9600,
- 0 };
-
- if (!strcmp(tty_descr,"Remote"))
- {
- prterr(ER_NOREMBD);
- return(NULL);
- }
- p = v_speed;
-
- if (startup)
- temp = atoi(*argv++); /* Get speed value */
- else
- temp = atoi(params[2]); /* Get speed value */
- found = FALSE;
- while (*p) /* Do until end of table */
- if (temp == *p++)
- found = TRUE;
-
- if (found)
- {
- if (!baud(tty_descr,temp))
- speed = temp; /* Set new speed value */
- else
- prterr(ER_NOBAUD);
- call_baud = FALSE; /* No need to call it anymore when opening line */
- }
- else
- {
- if (startup)
- return(ERROR);
- else
- prterr(ER_INVBAUD);
- }
- return (NULL);
- }
-
- set_config()
- {
- int temp;
-
- temp = atoi(params[2]); /* Get configuration */
- if ((temp < 0) || (temp > 7)) /* Check range */
- prterr(ER_ILLVALUE);
- else
- {
- config = temp; /* Set new value */
- close_port(FALSE,TRUE);
- }
- }
-
- set_timeout()
- {
- int temp;
-
- temp = atoi(params[2]); /* Get timeout value */
- if ((temp <= 0) || (temp > 100)) /* Check range */
- prterr(ER_ILLVALUE);
- else
- mytime = temp; /* Set new value */
- }
-
- set_prompt()
- {
- if (strlen(params[2]) > 20)
- params[2][20] = '\0'; /* Truncate string */
- strcpy(prompt, params[2]); /* Setup new prompt */
- }
-
- set_filetype()
- {
- char temp;
-
- temp = tolower(*params[2]);
- if (temp == 'a') /* ASCII */
- image = FALSE;
- else if (temp == 'b') /* BINARY */
- image = TRUE;
- else
- synerr(0);
- }
-
- set_log()
- {
- if ((params[2][0] == '-') && logfileopen)
- { /* Close file */
- fclose(lfp);
- logfile[0] = '\0'; /* Zap filename */
- logfileopen = logging = FALSE;
- }
- else
- {
- if (logfileopen)
- prterr(ER_FILEOPEN);
- else
- {
- if (strlen(params[2]) > 80)
- params[2][80] = '\0'; /* Truncate string */
- strcpy(logfile,params[2]);
- if ((lfp = fopen(logfile, "w")) == NULL)
- {
- prterr(ER_OPENERR);
- logfile[0] = '\0'; /* Zap filename */
- logfileopen = logging = FALSE;
- }
- else
- {
- logfileopen = TRUE;
- setbuf(lfp,0);
- }
- }
- }
- }
-
- set_dup()
- {
- char ch;
-
- ch = tolower(*params[2]);
-
- if (ch == 'f')
- fulldup = TRUE;
- else if (ch == 'h')
- fulldup = FALSE;
- else
- synerr(0);
- }
-
- set_hsh()
- {
- char start_tmp, stop_tmp;
-
- if (!synerr(4)) /* Be sure there are enough parameters */
- {
- start_tmp = atoi(params[2]); /* Set data start character */
- stop_tmp = atoi(params[3]); /* Set data stop character */
- if ((start_tmp < 0) || (start_tmp > 127)
- || (stop_tmp < 0) || (stop_tmp > 127))
- prterr(ER_ILLVALUE);
- else
- dstart = start_tmp;
- dstop = stop_tmp;
- }
- }
-
- set_quote()
- {
- char c;
-
- if (check_quote(c = *params[2]))
- {
- if ((c != myeightquote) && (c != myrptquote))
- myquote = c;
- else
- prterr(ER_CHRINUSE);
- }
- }
-
- set_eight_bit_quote()
- {
- char c;
-
- if (toupper(c = *params[2]) == 'N')
- myeightquote = 0; /* No eight bit quoting done */
- else if (check_quote(c))
- {
- if ((c != myquote) && (c != myrptquote))
- myeightquote = c;
- else
- prterr(ER_CHRINUSE);
- }
- }
-
- set_repeat_quote()
- {
- char c;
-
- if (toupper(c = *params[2]) == 'N')
- myrptquote = 0; /* No repeat quoting done */
- else if (check_quote(c))
- {
- if ((c != myquote) && (c != myeightquote))
- myrptquote = c;
- else
- prterr(ER_CHRINUSE);
- }
- }
-
- set_packet_length()
- {
- int size;
-
- size = atoi(params[2]);
- if ((size < 10) || (size > BIG_SIZE - 8))
- prterr(ER_INVLENG);
- else
- maxpacksiz = size;
- }
-
- set_padding()
- {
- int ptmp;
-
- ptmp = atoi(params[2]);
- if (ptmp > 94)
- prterr(ER_VALOUTRN);
- else
- mypad = ptmp;
- }
-
- set_padchar()
- {
- int ptmp;
-
- sscanf(params[2], "%x", &ptmp);
- mypchar = ptmp;
- }
-
- set_retry()
- {
- maxtry = atoi(params[2]);
- }
-
- set_end_of_line()
- {
- int etmp;
-
- sscanf(params[2], "%x", &etmp);
- if (etmp == mypackstart)
- prterr(ER_EOLDIF);
- else
- myeol = etmp;
- }
-
- set_start_of_packet()
- {
- int ptmp;
-
- sscanf(params[2], "%x", &ptmp);
- if (ptmp == myeol)
- prterr(ER_STRTDIF);
- else
- mypackstart = ptmp;
- }
-
- set_block_check_type()
- {
- char c;
-
- c = atoi(params[2]);
- if ((c >= 1) && (c <= 3))
- myblock_check_type = c;
- else
- prterr(ER_INVCHK);
- }
-
- set_incomplete()
- {
- char c;
-
- c = toupper(*params[2]);
- if (c == 'K')
- save_file = TRUE; /* Keep file */
- else if (c == 'D')
- save_file = FALSE; /* Discard file */
- else
- synerr(0);
- }
-
- set_delay()
- {
- send_delay = atoi(params[2]);
- }
-
- set_warning()
- {
- int temp;
-
- temp = set_onoff(2);
- if (temp != ERROR)
- warning = temp;
- else
- synerr(0);
- }
-
- set_mapping()
- {
- int temp;
-
- temp = set_onoff(2);
- if (temp != ERROR)
- mapping = temp;
- else
- synerr(0);
- }
-
- set_autorecover()
- {
- int temp;
-
- temp = set_onoff(2);
- if (temp != ERROR)
- auto_recover = temp;
- else
- synerr(0);
- }
-
- set_attributes()
- {
- int temp;
-
- temp = set_onoff(2);
- if (temp != ERROR)
- allowattr = temp;
- else
- synerr(0);
- }
-
- check_quote(qchar)
- char qchar;
- {
- if (((qchar >= '!') && (qchar <= '>')) ||
- ((qchar >= '{') && (qchar <= '~')) ||
- (qchar == '`'))
- return (TRUE); /* Valid character */
- else
- {
- prterr(ER_INVCHAR);
- return (FALSE); /* Invalid character */
- }
- }
-
- set_onoff(i)
- int i;
- {
- make_lower(params[i]);
- if (strcmp(params[i], "on") == 0)
- return TRUE;
- else
- if ((strcmp(params[i], "of") == 0) ||
- (strcmp(params[i], "off") == 0))
- return FALSE;
- else return ERROR;
- }
-